#ifndef _ZERO_TEST_CXXTEST_H
#define _ZERO_TEST_CXXTEST_H
#include "include/cxxstd.h"

// The file defines the infrastructure which is used to set up C++ subsystem test environment, note, there's another part in cxxfix.test.cc which is used by fix model only.
namespace zerotest
{
struct TestResult
{
	// new/delete
	unsigned int newOrder;
	unsigned int deleteOrder;

	// vcall
	unsigned int vcall;

	// exception
	unsigned int ex;
};

// interface <([{
class iface
{
	public:
		virtual void voo() = 0;
};

class ifacem : virtual public iface
{
	public:
		virtual void m() = 0;
};

class ifacen : virtual public iface
{
	public:
		virtual void n() = 0;
};

class ifacemn : virtual public ifacem, virtual public ifacen
{
	public:
		virtual void mn() = 0;
};

class ifacexx
{
	public:
		virtual void xx() = 0;
};
// }])>

// class <([{
class base
{
	public:
		TestResult* tr;
		int b;
		base(TestResult*);
		virtual ~base();
};

class inherit : public base, virtual public ifacemn
{
	public:
		int i;
		inherit(TestResult*);
		virtual ~inherit();
		virtual void voo();
		virtual void m();
		virtual void n();
		virtual void mn();
};

class grandson : public inherit, virtual public iface
{
	public:
		int g;
		grandson(TestResult*);
		virtual ~grandson();
		virtual void voo();
};
// }])>

// exception <([{
class test_exception : public std::exception
{
	public:
		TestResult* tr;
		test_exception(TestResult*) throw();
		virtual ~test_exception() throw();
		virtual const char* what() const throw();
};
// }])>
} // namespace zerotest
#endif
// vim: foldmarker=<([{,}])> foldmethod=marker
